lexer grammar YACCLexer;

options {
  language = Java;
  k=10;
}

@lexer::header {
  package PracticasPL.practica7;
  import java.util.ArrayList;
}

@lexer::members {
      //Lista que guarda los errores que se van produciendo durante el analisis lexico
    List<RecognitionException> errors = new ArrayList<RecognitionException>();

    //Metodo que devuelve la lista de errores que se han producido
    public List<RecognitionException> getAllErrors() {
        return errors;
    }
    
    //Metodo que comprueba si se han producido errores
    public boolean hasErrors() {
        return !errors.isEmpty();
    }

    //Metodo del analizador lexico sobrescrito para que los errores que se van
    //produciendo durante el analisis lexico en vez de mostrarse por consola
    //se guarden en la lista de errores (errors)
    @Override
    public void reportError(RecognitionException e) {
        errors.add(e);
    }
}

DEFINE : '#define';
BLANCO : (' '|'\t'|'\r'?'\n' ) {$channel=HIDDEN;};
//fragment INICIO_COM : '/*';
//fragment FIN_COM : '*/';
COMENTARIO: '/*' (options {greedy=false;}:.)* '*/' {$channel=HIDDEN;};
//
//fragment INT : 'int';
//fragment CHAR : 'char';
//fragment STRING : 'String';
//fragment DOUBLE : 'double';
//fragment REGISTER : 'register';
//
//NUMBER : 'NUMBER';
//EXTERN : 'extern';
//FILE : 'FILE';
//IF : 'if';
//TYPEDEF : 'typedef';
//STRUCT : 'struct';
//
//WHILE : 'while';
//FOR : 'for';
//CONTINUE : 'continue';

//INCLUDE : '#include';
//
//TIPO_DATO : INT | CHAR | STRING | DOUBLE | REGISTER;
// 
//fragment PAR_ABI : '(';
//fragment PAR_CERR : ')';
//fragment SUMA : '+';
//fragment RESTA : '-';
//fragment AST : '*';
//fragment DIV : '/';

//fragment PORCIENTO : '%';
//fragment LLAVE_AB : '{';
//fragment LLAVE_CER : '}';
//fragment MENOR : '<';
//fragment MAYOR : '>';
//fragment ASIGNACION : '=';
//fragment IGUAL_QUE : ASIGNACION ASIGNACION;
//fragment BACKSLASH : '\\';
//fragment DOLAR : '$';
//fragment CORCHETE_AB : '[';
//fragment CORCHETE_CERR : ']';
//fragment LO : 'lo';
//fragment HI : 'hi';
//SEPARADOR_BLOQUES : PORCIENTO PORCIENTO;
//
//
//
//fragment LETRA: ('A'..'Z')|('a'..'z')|'_';
//fragment DIGITO : '0'..'9';
//fragment PUNTO : '.';
//IDENT : (LETRA | PUNTO)+;
//
////FIN_FICH : 'EOF';
//COLON : ':';
//SEMICOLON : ';';
//PARENTESIS : PAR_ABI | PAR_CERR;
//COMILLAS : '"';
//fragment COMILLAS_SIMPLES : '\'';
//OR : '|';
//OR_C : '||';
//LLAVES : LLAVE_AB | LLAVE_CER;
//SEPARADOR_CABECERAS : PORCIENTO LLAVES;
//COMPARADORES : MAYOR | MENOR | IGUAL_QUE;
//COMA : ',';
//
//
////MENOS_UNARIO : RESTA;
//
////VACIO : COMILLAS_SIMPLES (options {greedy=false;}:.)* COMILLAS_SIMPLES;
//
//
//
//
////OPASIG : ASIGNACION;
//
//fragment VAR_ACTUAL : DOLAR DOLAR (PUNTO (LO | HI))?;
//fragment VAR_NUMERO : DOLAR DIGITO (PUNTO (LO | HI))?;
//NUMERO : (DIGITO)+('.'(DIGITO)+)?;
//
//
//fragment DEF_FORMATO : PORCIENTO NUMERO? LETRA;
//CARACTER_ESPECIAL : BACKSLASH LETRA;
//
//OPERADORES: SUMA | RESTA | AST | DIV;
//MODULO : PORCIENTO;
//
//OP_SUMA_COMILLAS : COMILLAS_SIMPLES SUMA COMILLAS_SIMPLES;
//OP_RESTA_COMILLAS : COMILLAS_SIMPLES RESTA COMILLAS_SIMPLES;
//OP_MUL_COMILLAS : COMILLAS_SIMPLES AST COMILLAS_SIMPLES;
//OP_DIV_COMILLAS : COMILLAS_SIMPLES DIV COMILLAS_SIMPLES;
//OP_ASIG_COMILLAS : COMILLAS_SIMPLES ASIGNACION COMILLAS_SIMPLES;
//PAREN_AB_COMILLAS : COMILLAS_SIMPLES PAR_ABI COMILLAS_SIMPLES;
//PAREN_CER_COMILLAS : COMILLAS_SIMPLES PAR_CERR COMILLAS_SIMPLES;
//COMA_COMILLAS : COMILLAS_SIMPLES COMA COMILLAS_SIMPLES;
//
//fragment INC_IND : (IDENT) SUMA NUMERO;
//
//CADENA : COMILLAS (options {greedy=false;}:.)* COMILLAS;
//
////YVECTOR : IDENT CORCHETE_AB (NUMERO | VAR_NUMERO | INC_IND)?  CORCHETE_CERR;
//
//OPT_VECTOR : (NUMERO | VAR_NUMERO | INC_IND);
//
//IDENT_PATRON : PORCIENTO IDENT;
//
//CARACTER : COMILLAS_SIMPLES (LETRA | CARACTER_ESPECIAL | OPERADORES | BLANCO) COMILLAS_SIMPLES;
//



//CADENA : COMILLAS (PARENTESIS | BLANCO | COMA | LETRA | NUMERO | DEF_FORMATO | ASIGNACION | CARACTER_ESPECIAL)+ COMILLAS;





